/**
 * 
 */
package rer.persistencia;



import java.sql.Date;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import rer.model.Cliente;
import rer.util.ConexaoJDBC_mysql;

/**
 * @author Henrique Serrat
 * @since 15/11/2014
 *
 */

public class ClienteDAO implements IClienteDAO {

	// Vari�veis da classe
			private Statement statement;
			private PreparedStatement preparedStatement;
			private ResultSet resultSet;
			private String query;
			private List<Cliente> clientes;
			private Cliente cliente = new Cliente();
			private Connection conexao = ConexaoJDBC_mysql.getConnection();
			

			
			@Override
			public Boolean cadastrar(Cliente cliente) {
				// TODO Auto-generated method stub

				//System.out.println("Chegou aqui!!");
			
				try {
					//System.out.println("Aqui QUERY");
					query = "INSERT INTO db_ceirr.Cliente (nomeCliente, cpfCliente, rgCliente, "
							+ "dobCliente, telCliente, tel2Cliente, celCliente, ecCliente, natCliente, "
							+ "sexoCliente, formacaoCliente, rua, bairro, numero, complemento, cep, "
							+ "cidade, estado, statusCliente) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,'A')";
											
					System.out.println("Aqui pos query");

					preparedStatement = conexao.prepareStatement(query);
					System.out.println("Aqui conexao");
					
					preparedStatement.setString(1, cliente.getNomeCliente());
					preparedStatement.setString(2, cliente.getCpfCliente());
					preparedStatement.setString(3, cliente.getRgCliente());
					preparedStatement.setDate(4, new Date(cliente.getDobCliente().getTime()));
					preparedStatement.setString(5, cliente.getTelCliente());
					
					preparedStatement.setString(6, cliente.getTel2Cliente());//tratar null
					
					preparedStatement.setString(7, cliente.getCelCliente());//tratar null
					
					preparedStatement.setString(8, cliente.getEcCliente());
					preparedStatement.setString(9, cliente.getNatCliente());
					preparedStatement.setString(10, cliente.getSexoCliente());
					preparedStatement.setString(11, cliente.getFormacaoCliente());
					preparedStatement.setString(12, cliente.getRua());
					preparedStatement.setString(13, cliente.getBairro());
					preparedStatement.setString(14, cliente.getNumero());
					
					preparedStatement.setString(15, cliente.getComplemento());//tratar null
					
					preparedStatement.setString(16, cliente.getCep());
					
					preparedStatement.setString(17, cliente.getCidade());//tratar null
					
					preparedStatement.setString(18, cliente.getEstado());//tratar null

					preparedStatement.execute();
					
					System.out.println("Aqui TRUE");
					
					return true;
					
					
				} catch (SQLException erro) {
					// TODO: handle exception
					System.out.println("Aqui ERRO");
					System.out.println(erro.getMessage());		
				}finally{
					try {
						System.out.println("Aqui?");
						preparedStatement.close();
						
					} catch (SQLException e) {
						// TODO: handle exception
						e.printStackTrace();
						System.out.println("Erro ao fechar o statement");
					}
					System.out.println("Finally");
				}
				
				return false;
				
			}
				
				
			@Override
			public Boolean editar(Cliente cliente) {
				// TODO Auto-generated method stub
				
				
				try{
					query = "UPDATE `cliente` SET `nomeCliente`=?, `cpfCliente`=?,`rgCliente`=?,"
							+ "`dobCliente`=?,`telCliente`=?,"
							+ "`tel2Cliente`=?,`celCliente`=?,`ecCliente`=?,`natCliente`=?,"
							+ "`sexoCliente`=?,`formacaoCliente`=?,`rua`=?,`bairro`=?,`numero`=?,"
							+ "`complemento`=?,`cep`=?,`cidade`=?,`estado`=? WHERE `cliente`.`idCliente` = ?";
					
					preparedStatement = conexao.prepareStatement(query);
					
					preparedStatement.setString(1, cliente.getNomeCliente());
					preparedStatement.setString(2, cliente.getCpfCliente());
					preparedStatement.setString(3, cliente.getRgCliente());
					preparedStatement.setDate(4, new Date(cliente.getDobCliente().getTime()));
					preparedStatement.setString(5, cliente.getTelCliente());
					
					preparedStatement.setString(6, cliente.getTel2Cliente());//tratar null
					
					preparedStatement.setString(7, cliente.getCelCliente());//tratar null
					
					preparedStatement.setString(8, cliente.getEcCliente());
					preparedStatement.setString(9, cliente.getNatCliente());
					preparedStatement.setString(10, cliente.getSexoCliente());
					preparedStatement.setString(11, cliente.getFormacaoCliente());
					preparedStatement.setString(12, cliente.getRua());
					preparedStatement.setString(13, cliente.getBairro());
					preparedStatement.setString(14, cliente.getNumero());
					
					preparedStatement.setString(15, cliente.getComplemento());//tratar null
					
					preparedStatement.setString(16, cliente.getCep());
					
					preparedStatement.setString(17, cliente.getCidade());//tratar null
					
					preparedStatement.setString(18, cliente.getEstado());//tratar null
					
					preparedStatement.setInt(19, cliente.getIdCliente());
					
					preparedStatement.executeUpdate();
					
					
					System.out.println("Dados Cliente Alterados com sucesso - DAO ");
					
					return true;
					
				}catch(SQLException erro){
					System.out.println(erro.getMessage());
				}
				
				return false;
				
				
			}
			
			@Override
			public Boolean deletar(int id) {
				
				try{
					
					query ="DELETE FROM `db_ceirr`.`cliente` WHERE `cliente`.`idCliente` = ?";
					
					preparedStatement = conexao.prepareStatement(query);
					preparedStatement.setInt(1, id);
					
					preparedStatement.executeUpdate();
					
					System.out.println("\nCliente apagado com sucesso");
					
					return true;
					
				}catch(SQLException erro){
					System.out.println(erro.getMessage());
					return false;
				}

			}
			
			@Override
			public List<Cliente> listar() {
				// TODO Auto-generated method stub
				
				clientes = null;
				
				try {
					
					query = "SELECT * FROM db_ceirr.cliente";
	
					statement = conexao.createStatement();
					resultSet = statement.executeQuery(query);
					
					clientes = new ArrayList<Cliente>();
					
					while(resultSet.next()){
						
						cliente = new Cliente();
						cliente.setIdCliente(resultSet.getInt("idCliente"));
						cliente.setNomeCliente(resultSet.getString("nomeCliente"));
						cliente.setCpfCliente(resultSet.getString("cpfCliente"));
						cliente.setRgCliente(resultSet.getString("rgCliente"));
						cliente.setDobCliente(resultSet.getDate("dobCliente"));
						cliente.setTelCliente(resultSet.getString("telCliente"));
						cliente.setTel2Cliente(resultSet.getString("tel2Cliente"));
						cliente.setCelCliente(resultSet.getString("celCliente"));
						cliente.setEcCliente(resultSet.getString("ecCliente"));
						cliente.setNatCliente(resultSet.getString("natCliente"));
						cliente.setSexoCliente(resultSet.getString("sexoCliente"));
						cliente.setFormacaoCliente(resultSet.getString("formacaoCliente"));
						cliente.setRua(resultSet.getString("rua"));
						cliente.setBairro(resultSet.getString("bairro"));
						cliente.setNumero(resultSet.getString("numero"));
						cliente.setComplemento(resultSet.getString("complemento"));
						cliente.setCep(resultSet.getString("cep"));
						cliente.setCidade(resultSet.getString("cidade"));
						cliente.setEstado(resultSet.getString("estado"));
						
						clientes.add(cliente);
						
					}
					
					
				} catch (Exception erro) {
					// TODO: handle exception
				
					System.out.println(erro.getMessage());
				
				}
				try {
					statement.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					System.out.println("\n Erro ao fechar o objeto preparedStatement.");
				}
				System.out.println("\nSucesso pesquisa");
				
				return clientes;
			}
			
			@Override // Estou usando esse metodo ;
			public Cliente pesquisaCliente(Integer id){
				
				cliente = null;
				
				try {
					
					query = "SELECT * FROM cliente WHERE cliente.idCliente = ?";

					preparedStatement = conexao.prepareStatement(query);

					preparedStatement.setInt(1, id.intValue());

					resultSet = preparedStatement.executeQuery();

					if (resultSet.next()) {

						cliente = new Cliente();

						cliente.setIdCliente(resultSet.getInt("idCliente"));
						cliente.setNomeCliente(resultSet.getString("nomeCliente"));
						cliente.setCpfCliente(resultSet.getString("cpfCliente"));
						cliente.setRgCliente(resultSet.getString("rgCliente"));
						cliente.setDobCliente(resultSet.getDate("dobCliente"));
						cliente.setTelCliente(resultSet.getString("telCliente"));
						cliente.setTel2Cliente(resultSet.getString("tel2Cliente"));
						cliente.setCelCliente(resultSet.getString("celCliente"));
						cliente.setEcCliente(resultSet.getString("ecCliente"));
						cliente.setNatCliente(resultSet.getString("natCliente"));
						cliente.setSexoCliente(resultSet.getString("sexoCliente"));
						cliente.setFormacaoCliente(resultSet.getString("formacaoCliente"));
						cliente.setRua(resultSet.getString("rua"));
						cliente.setBairro(resultSet.getString("bairro"));
						cliente.setNumero(resultSet.getString("numero"));
						cliente.setComplemento(resultSet.getString("complemento"));
						cliente.setCep(resultSet.getString("cep"));
						cliente.setCidade(resultSet.getString("cidade"));
						cliente.setEstado(resultSet.getString("estado"));
						
					}
					
					System.out.println("Pesquisa  feita do usuario: id: " + cliente.getIdCliente());
					
				} catch (SQLException e) {
					// TODO: handle exception
					System.out.println(e.getMessage());
				}
				
				return cliente;
			}


			@Override
			public Cliente pesquisaCliente(String cpf) {
				cliente = null;
				
				try {
					
					query = "SELECT * FROM cliente WHERE cliente.cpfCliente = ?";

					preparedStatement = conexao.prepareStatement(query);

					preparedStatement.setString(1, cpf);

					resultSet = preparedStatement.executeQuery();

					if (resultSet.next()) {

						cliente = new Cliente();

						cliente.setIdCliente(resultSet.getInt("idCliente"));
						cliente.setNomeCliente(resultSet.getString("nomeCliente"));
						cliente.setCpfCliente(resultSet.getString("cpfCliente"));
						cliente.setRgCliente(resultSet.getString("rgCliente"));
						cliente.setDobCliente(resultSet.getDate("dobCliente"));
						cliente.setTelCliente(resultSet.getString("telCliente"));
						cliente.setTel2Cliente(resultSet.getString("tel2Cliente"));
						cliente.setCelCliente(resultSet.getString("celCliente"));
						cliente.setEcCliente(resultSet.getString("ecCliente"));
						cliente.setNatCliente(resultSet.getString("natCliente"));
						cliente.setSexoCliente(resultSet.getString("sexoCliente"));
						cliente.setFormacaoCliente(resultSet.getString("formacaoCliente"));
						cliente.setRua(resultSet.getString("rua"));
						cliente.setBairro(resultSet.getString("bairro"));
						cliente.setNumero(resultSet.getString("numero"));
						cliente.setComplemento(resultSet.getString("complemento"));
						cliente.setCep(resultSet.getString("cep"));
						cliente.setCidade(resultSet.getString("cidade"));
						cliente.setEstado(resultSet.getString("estado"));
						
					}
					
					System.out.println("Pesquisa  feita do usuario: id: " + cliente.getIdCliente());
					
				} catch (SQLException e) {
					// TODO: handle exception
					System.out.println(e.getMessage());
				}
				
				return cliente;
			}


			@Override
			public List<Cliente> ultimosClientes() {
				clientes = null;
				
				try {
					
					query = "select * from db_ceirr.cliente order by idCliente desc limit 5;";
	
					statement = conexao.createStatement();
					resultSet = statement.executeQuery(query);
					
					clientes = new ArrayList<Cliente>();
					
					while(resultSet.next()){
						
						cliente = new Cliente();
						cliente.setIdCliente(resultSet.getInt("idCliente"));
						cliente.setNomeCliente(resultSet.getString("nomeCliente"));
						cliente.setCpfCliente(resultSet.getString("cpfCliente"));
						cliente.setRgCliente(resultSet.getString("rgCliente"));
						cliente.setDobCliente(resultSet.getDate("dobCliente"));
						cliente.setTelCliente(resultSet.getString("telCliente"));
						cliente.setTel2Cliente(resultSet.getString("tel2Cliente"));
						cliente.setCelCliente(resultSet.getString("celCliente"));
						cliente.setEcCliente(resultSet.getString("ecCliente"));
						cliente.setNatCliente(resultSet.getString("natCliente"));
						cliente.setSexoCliente(resultSet.getString("sexoCliente"));
						cliente.setFormacaoCliente(resultSet.getString("formacaoCliente"));
						cliente.setRua(resultSet.getString("rua"));
						cliente.setBairro(resultSet.getString("bairro"));
						cliente.setNumero(resultSet.getString("numero"));
						cliente.setComplemento(resultSet.getString("complemento"));
						cliente.setCep(resultSet.getString("cep"));
						cliente.setCidade(resultSet.getString("cidade"));
						cliente.setEstado(resultSet.getString("estado"));
						
						clientes.add(cliente);
						
					}
					
					
				} catch (Exception erro) {
					// TODO: handle exception
				
					System.out.println(erro.getMessage());
				
				}
				try {
					statement.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					System.out.println("\n Erro ao fechar o objeto preparedStatement.");
				}
				System.out.println("\nSucesso pesquisa");
				
				return clientes;
			}
			
			
			
			
			
}
